/*
    This file is part of QTau
    Copyright (C) 2013-2018  Tobias "Tomoko" Platen <tplaten@posteo.de>
    Copyright (C) 2013       digited       <https://github.com/digited>
    Copyright (C) 2010-2013  HAL@ShurabaP  <https://github.com/haruneko>

    QTau is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

    SPDX-License-Identifier: GPL-3.0+
*/
#include "utaudb.h"
#include "Utils.h"

#define __devloglevel__ 0
#include <QStringList>
#include <QDirIterator>
#include <QFileInfo>
#include "otoini.h"
#include <sekai/VVDReader.h>


UTAUDB::UTAUDB(QString path) : _path(path)
{
    int dir = 0;
    DEVLOG_DEBUG("UTAUDB: "+path);
    QDirIterator it(path, QStringList() << "oto.ini", QDir::Files, QDirIterator::Subdirectories);

    _reader=new VVDReader();
    while (it.hasNext())
    {
        QString oto = it.next();
        DEVLOG_DEBUG("OTO: "+ oto);
        OTOINI* ini = new OTOINI(dir);
        ini->readFromFile(oto);
        QString dir = QFileInfo(oto).dir().path();
        _dirs.push_back(dir);
        int vvd_count = 0;
        foreach(oto_entry* entry,ini->entries())
        {
            QString vvd = dir+"/"+entry->filename;
            vvd.replace(".wav",".vvd");
            DEVLOG_DEBUG("vvd: "+vvd);
            entry->vvd_index=vvd_count;
            if(!_vvds.keys().contains(vvd))
            {

                DEVLOG_DEBUG("vvd_count="+STR(vvd_count));
                bool ret = _reader->addVVD(vvd.toStdString());
                if(ret) {
                    _vvds[vvd]=vvd_count;
                    vvd_count++;
                }
            }

            _entries.push_back(entry);
        }
        delete ini;
    }
    //TODO -- read from vvd

}

oto_entry* UTAUDB::getEntryByLyric(QString lyric)
{
    foreach(oto_entry* ent,_entries)
    {
        DEVLOG_DEBUG(ent->name);
        if(ent->name==lyric) {
            return ent;
        }
    }
    return NULL;
}

